package chapter02;

import java.util.ArrayList;
import java.util.List;

public class Subsets78 {
    /**
     * process(nums,pos,path) nums数组pos位置是否需要加入path
     * 递归出口
     *  1).pos==nums.length
     *      res.add(path)
     *      return
     *  2).其他情况
     *      process(nums,pos+1,path)  nums数组pos位置不需要
     *      path.add(nums[pos])       nums数组pos位置需要
     *      process(nums,pos+1,path)
     *      path.remove(nums[pos])
     */
    List<List<Integer>> res=new ArrayList<>();
    public List<List<Integer>> subsets(int[] nums) {
        process(nums,0,new ArrayList<>());
        return res;
    }

    public void process(int[] nums,int pos,List<Integer> path){
        if(pos==nums.length){
            res.add(new ArrayList<>(path));
            return;
        }
        process(nums,pos+1,path);
        path.add(nums[pos]);
        process(nums,pos+1,path);
        path.remove(path.size()-1);
    }
}
